#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Motor.h"
#include "Key.h"
#include "Nixie.h"
#include "Timer.h"
#include "Encoder.h"
#include "uart.h"
uint8_t KeyNum;		//定义用于接收按键键码的变量
int8_t 	duty;		//定义占空比
int8_t 	Speed;		//定义速度

uint8_t RX_Data;
uint8_t Flag;

void Serial_SendByte(uint16_t Byte)
{
	USART_SendData(USART1,Byte);
	//0 表示数据还未转移到移位寄存器 循环等待 1 数据已经被转移到了移位寄存器可以发送数据
	while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);  //不需要手动清零 再次写入TDR时会自动清零	
}

int main(void)
{
	/*数码管的显示*/
	 Nixie_Init(); // 配置GPIO
     Nixie_DisplayDigit(6); // 显示数字6
	
	/*模块初始化*/
	OLED_Init();		//OLED初始化
	Motor_Init();		//直流电机初始化
	Key_Init();			//按键初始化
	Timer_Init();       //定时器初始化
	Encoder_Init();
	Usart1_Init(9600);		//串口1 初始化
	/*显示汉字*/
	OLED_ShowChinese(1, 1, 0);
	OLED_ShowChinese(1, 2, 1);
	OLED_ShowChinese(1, 3, 2);  //显示"占空比"

	OLED_ShowChinese(2, 1, 3);
	OLED_ShowChinese(2, 3, 4);  //显示"状态"

	OLED_ShowChinese(3, 1, 5);
	OLED_ShowChinese(3, 3, 6);  // 显示"转速"
	
	
	
	//printf("hello word\r\n");
	// Serial_SendByte(0x16);	

	Speed = 0;
	duty=0;
	
	OLED_ShowString(3, 8, "+");
	
	while (1)
	{
		OLED_ShowNum(1, 8, duty, 3);		
		KeyNum = Key_GetNum();				//获取按键键码
		Motor_SetSpeed(duty);				//设置直流电机的速度为速度变量
			
		if (KeyNum == 1)					//按键1按下
		{			
			Serial_SendByte(0x10);
			OLED_ShowString(3, 8, "+");
			KeyNum = 0;
		}
			if (KeyNum == 2)					//按键2按下
		{			
				Serial_SendByte(0x11);
			OLED_ShowString(3, 8, "-");
				KeyNum = 0;
			
		}
			if (KeyNum == 3)					//按键3按下
		{			
				Serial_SendByte(0x12); 
				duty+=25;
				KeyNum = 0;
			
		}
		if (KeyNum == 4)					//按键4按下
		{			
				Serial_SendByte(0x13);
				duty-=25; 			
				KeyNum = 0;
			
		}
		
		
	}
	


}

void USART1_IRQHandler(void)
{
	if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)   
	{
		RX_Data=USART_ReceiveData(USART1);
		Flag=1;
		USART_ClearITPendingBit(USART1,USART_IT_RXNE);  
	}
}